package JZOffer;

/**
 * 剑指 Offer 53 - II. 0～n-1中缺失的数字
 * 一个长度为n-1的递增排序数组中的所有数字都是唯一的，并且每个数字都在范围0～n-1之内。
 * 在范围0～n-1内的n个数字中有且只有一个数字不在该数组中，请找出这个数字。
 *
 * 示例 1:
 * 输入: [0,1,3]
 * 输出: 2
 *
 * 示例 2:
 * 输入: [0,1,2,3,4,5,6,7,9]
 * 输出: 8
 * */

//方案一  二分法
class Solution53_2_1 {
    public int missingNumber(int[] nums) {
        int i = 0, j = nums.length - 1;
        while (i <= j) {
            int mid = i + j >> 1;
            if (nums[mid] == mid) i = mid + 1;
            else j =  mid - 1;
        }
        return i;
    }
}

//方案二只要比较数组下标和该下标对应的值即可，再排除缺失0和缺失最后一项两个特殊情况。
class Solution53_2_2 {
    public int missingNumber(int[] nums) {
        if (nums[0] == 1) return 0;
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] != i) return i;
        }
        return nums.length;
    }
}